﻿using System;
using JTLeigh.Commerce.Spencer.Features.ProductFeedback.Common.Entities;

namespace JTLeigh.Commerce.Spencer.Features.ProductFeedback.Business.Caches
{

	/// <summary>
	/// A null <see cref="IProductFeedbackMetadataCache"/> implementation that does not cache 
	/// product feedback metadata.
	/// </summary>
	/// <remarks>
	/// <para>
	/// This cache should not be used in production.
	/// </para>
	/// </remarks>
	public class NullProductFeedbackMetadataCache : IProductFeedbackMetadataCache
	{

		#region IProductFeedbackMetadataCache Members

		/// <summary>
		/// Always returns <see langword="null"/>.
		/// </summary>
		/// <param name="tenantId">Ignored.</param>
		/// <returns><see langword="null" />.</returns>
		public ProductFeedbackMetadata GetProductFeedbackMetadata(Guid tenantId)
		{
			return null;
		}

		/// <summary>
		/// Does nothing.
		/// </summary>
		/// <param name="tenantId">Ignored.</param>
		/// <param name="metadata">Ignored.</param>
		public void SetProductFeedbackMetadata(Guid tenantId, ProductFeedbackMetadata metadata)
		{
		}

        /// <summary>
        /// Always returns <see langword="null"/>.
        /// </summary>
        /// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="categoryId">Ignored.</param>
        /// <returns><see langword="null" />.</returns>
        public ProductFeedbackBadgeCategoryRelations GetProductFeedbackBadgeCategoryRelations(Guid tenantId, string catalogId, string categoryId)
        {
            return null;
        }

        /// <summary>
        /// Does nothing.
        /// </summary>
        /// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="categoryId">Ignored.</param>
        /// <param name="relations">Ignored.</param>
        public void SetProductFeedbackBadgeCategoryRelations(Guid tenantId, string catalogId, string categoryId, ProductFeedbackBadgeCategoryRelations relations)
        {
        }

        /// <summary>
        /// Always returns <see langword="null"/>.
        /// </summary>
        /// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="productId">Ignored.</param>
        /// <returns><see langword="null" />.</returns>
        public ProductFeedbackBadgeProductRelations GetProductFeedbackBadgeProductRelations(Guid tenantId, string catalogId, string productId)
        {
            return null;
        }

        /// <summary>
        /// Does nothing.
        /// </summary>
        /// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="productId">Ignored.</param>
        /// <param name="relations">Ignored.</param>
        public void SetProductFeedbackBadgeProductRelations(Guid tenantId, string catalogId, string productId, ProductFeedbackBadgeProductRelations relations)
        {
        }

        /// <summary>
		/// Always returns <see langword="null"/>.
		/// </summary>
		/// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="categoryId">Ignored.</param>
		/// <returns><see langword="null" />.</returns>
		public ProductRatingAttributeCategoryRelations GetProductRatingAttributeCategoryRelations(Guid tenantId, string catalogId, string categoryId)
		{
			return null;
		}

		/// <summary>
		/// Does nothing.
		/// </summary>
		/// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="categoryId">Ignored.</param>
		/// <param name="relations">Ignored.</param>
		public void SetProductRatingAttributeCategoryRelations(Guid tenantId, string catalogId, string categoryId, ProductRatingAttributeCategoryRelations relations)
		{
		}

		/// <summary>
		/// Always returns <see langword="null"/>.
		/// </summary>
		/// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="productId">Ignored.</param>
		/// <returns><see langword="null" />.</returns>
		public ProductRatingAttributeProductRelations GetProductRatingAttributeProductRelations(Guid tenantId, string catalogId, string productId)
		{
			return null;
		}

		/// <summary>
		/// Does nothing.
		/// </summary>
		/// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="productId">Ignored.</param>
		/// <param name="relations">Ignored.</param>
		public void SetProductRatingAttributeProductRelations(Guid tenantId, string catalogId, string productId, ProductRatingAttributeProductRelations relations)
		{
		}

		/// <summary>
		/// Always returns <see langword="null"/>.
		/// </summary>
		/// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="categoryId">Ignored.</param>
		/// <returns><see langword="null" />.</returns>
		public ProductRecommendationAttributeCategoryRelations GetProductRecommendationAttributeCategoryRelations(Guid tenantId, string catalogId, string categoryId)
		{
			return null;
		}

		/// <summary>
		/// Does nothing.
		/// </summary>
		/// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="categoryId">Ignored.</param>
		/// <param name="relations">Ignored.</param>
		public void SetProductRecommendationAttributeCategoryRelations(Guid tenantId, string catalogId, string categoryId, ProductRecommendationAttributeCategoryRelations relations)
		{
		}

		/// <summary>
		/// Always returns <see langword="null"/>.
		/// </summary>
		/// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="productId">Ignored.</param>
		/// <returns><see langword="null" />.</returns>
		public ProductRecommendationAttributeProductRelations GetProductRecommendationAttributeProductRelations(Guid tenantId, string catalogId, string productId)
		{
			return null;
		}

		/// <summary>
		/// Does nothing.
		/// </summary>
		/// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="productId">Ignored.</param>
		/// <param name="relations">Ignored.</param>
		public void SetProductRecommendationAttributeProductRelations(Guid tenantId, string catalogId, string productId, ProductRecommendationAttributeProductRelations relations)
		{
		}

		/// <summary>
		/// Always returns <see langword="null"/>.
		/// </summary>
		/// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="categoryId">Ignored.</param>
		/// <returns><see langword="null" />.</returns>
		public ProductReviewAttributeCategoryRelations GetProductReviewAttributeCategoryRelations(Guid tenantId, string catalogId, string categoryId)
		{
			return null;
		}

		/// <summary>
		/// Does nothing.
		/// </summary>
		/// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="categoryId">Ignored.</param>
		/// <param name="relations">Ignored.</param>
		public void SetProductReviewAttributeCategoryRelations(Guid tenantId, string catalogId, string categoryId, ProductReviewAttributeCategoryRelations relations)
		{
		}

		/// <summary>
		/// Always returns <see langword="null"/>.
		/// </summary>
		/// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="productId">Ignored.</param>
		/// <returns><see langword="null" />.</returns>
		public ProductReviewAttributeProductRelations GetProductReviewAttributeProductRelations(Guid tenantId, string catalogId, string productId)
		{
			return null;
		}

		/// <summary>
		/// Does nothing.
		/// </summary>
		/// <param name="tenantId">Ignored.</param>
        /// <param name="catalogId">Ignored.</param>
        /// <param name="productId">Ignored.</param>
		/// <param name="relations">Ignored.</param>
		public void SetProductReviewAttributeProductRelations(Guid tenantId, string catalogId, string productId, ProductReviewAttributeProductRelations relations)
		{
		}

		#endregion // IProductFeedbackMetadataCache

	}

}
